package com.android.adc.sensors;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;

/**
 * Klasa zarządcy zbierającego informacje o sensorach i przekazującego
 * je do odpowiednich klas analizujących ich stan
 * 
 * @author Maciej Pawlak
 *
 */
public class SensorInformationManager implements SensorEventListener
{
	private SensorManager sensorManager;
    private Sensor accelerometrSensor;
    private Sensor proximitySensor;
    
    private SensorAnalyzer analyzer;
    
    public SensorInformationManager(SensorManager sensorManager)
    {
    	this.sensorManager = sensorManager;
    	this.analyzer = new SensorAnalyzer();
    	
    	init();
    }
    
    public void unregister()
    {
    	sensorManager.unregisterListener(this);
    }
    
    private void init()
    {
        accelerometrSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
        

        sensorManager.registerListener(this, accelerometrSensor, SensorManager.SENSOR_DELAY_UI);
        sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_UI);
    }

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) 
	{
		/* Nic nie rób */
	}
	
	public boolean isInMove()
	{
		return analyzer.isInMove();
	}
	
	public void clearSensorAnalysis()
	{
		analyzer.clear();
	}
	
	public boolean hasChanged()
	{
		return analyzer.hasChanged();
	}
	
	

	@Override
	public void onSensorChanged(SensorEvent event) 
	{
		/* W zależności od typu sensora, zaktualizuj 
		 * informację w analizatorze
		 */
		if(event.sensor.equals(accelerometrSensor))
			analyzer.updateAccelerator(event.values);
		
		else if(event.sensor.equals(proximitySensor))
		{
			Log.d("Proximity", "Proxy: "+event.values[0] + ", "+event.values[1]+ ", "+event.values[2]);
			analyzer.updateProxmity((int)event.values[0]);	
		}
	}
	


}
